package club.controller;

import club.pojo.Admins;
import club.service.AdminService;
import club.service.UserService;
import club.util.Message;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;


@Controller
@RequestMapping("/admin")
public class AdminController {

    @Resource
    private AdminService adminService;

    /**
     * 添加管理员
     * @param admins 管理员实体对象
     * @param file 上传的头像文件
     * @return 操作结果消息
     */
    @RequestMapping("/create")
    @ResponseBody
    public Message add(Admins admins, MultipartFile file){
        String pic = FileLoad.uploadAdminPic(file);
        //上传头像并获取存储路径
        admins.setPic(pic);
        //设置头像路径
        int add = adminService.add(admins);
        if(add>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    /**
     * 根据ID查找管理员
     * @param id 管理员ID
     * @return 包含管理员信息的操作结果消息
     */
    @RequestMapping("findById")
    @ResponseBody
    public Message findById(Integer id){
        Admins byId = adminService.findById(id);
        return Message.success().add("admin",byId);
    }

    /**
     * 更新管理员信息
     * @param admins 管理员实体对象
     * @param file 上传的头像文件（可选）
     * @return 操作结果消息
     */
    @RequestMapping("/update")
    @ResponseBody
    public Message update(Admins admins, MultipartFile file){
        if (file != null && file.getSize() > 0){
            // 检查是否有新上传的头像
            String pic = FileLoad.uploadAdminPic(file);
            // 上传新头像并获取存储路径
            admins.setPic(pic);
            // 设置新头像路径
        }
        int update = adminService.update(admins);
        if(update>0){
            return  Message.success();
        }else {
            return Message.fail();
        }
    }

    /**
     * 删除管理员
     * @param id 管理员ID
     * @return 操作结果消息
     */
    @RequestMapping("/delete")
    @ResponseBody
    public Message del(Integer id){
        int del = adminService.del(id);
        if(del>0){
            return Message.success();
        }else {
            return Message.fail();
        }
    }

    /**
     * 分页查询管理员列表
     * @param adminName 管理员姓名（可选，用于模糊查询）
     * @param pageNum 页码
     * @return 包含分页信息的操作结果消息
     */
    @RequestMapping("/admins")
    @ResponseBody
    public Message admins(@RequestParam(required = false) String adminName, @RequestParam("pn") Integer pageNum){
        Integer pageSize = 4;
        if(pageNum == null){
            pageNum = 1;
        }
        PageInfo<Admins> list = adminService.adminPage(adminName, pageNum, pageSize);
        // 调用服务层获取分页数据
        return Message.success().add("pageInfo",list);
    }

    /**
     * 跳转到管理员管理页面
     * @return 视图名称
     */
    @RequestMapping("/admin")
    public String admin(){
        return "admin/admin";
    }

    /**
     * 跳转到领养管理页面
     * @return 视图名称
     */
    @RequestMapping("/adopt")
    public String adopt(){
        return "admin/adopt";
    }

    /**
     * 跳转到同意领养页面
     * @return 视图名称
     */
    @RequestMapping("/agree")
    public String agree(){
        return "admin/agree";
    }

    /**
     * 跳转到申请管理页面
     * @return 视图名称
     */
    @RequestMapping("/apply")
    public String apply(){
        return "admin/apply";
    }

    /**
     * 跳转到博客管理页面
     * @return 视图名称
     */
    @RequestMapping("/blog")
    public String blog(){
        return "admin/blog";
    }

    /**
     * 跳转到评论管理页面
     * @return 视图名称
     */

    /**
     * 跳转到不同意领养页面
     * @return 视图名称
     */
    @RequestMapping("/disAgree")
    public String disAgree(){
        return "admin/disAgree";
    }

    /**
     * 跳转到宠物管理页面
     * @return 视图名称
     */
    @RequestMapping("/pet")
    public String pet(){
        return "admin/pet";
    }

    /**
     * 跳转到用户管理页面
     * @return 视图名称
     */
    @RequestMapping("/user")
    public String user(){
        return "admin/user";
    }

    /**
     * 跳转到管理员登录页面
     * @return 视图名称
     */
    @RequestMapping("/login")
    public String login(){
        return "admin/login";
    }

    /**
     * 处理管理员登录请求
     * @param session HTTP会话
     * @param adminName 管理员用户名
     * @param adminPwd 管理员密码
     * @return 登录成功则重定向到管理首页，失败则返回到登录页面
     */
    @RequestMapping("/dologin")
    public String doLogin(HttpSession session, String adminName, String adminPwd){
        Admins login = adminService.login(adminName, adminPwd);
        // 调用服务层验证登录
        if (login == null){
            session.setAttribute("msg","用户名或密码错误！");
            // 设置错误消息
            return "redirect:/admin/login";
            // 登录失败，重定向到登录页面
        }
        session.setAttribute("admin",login);
        // 登录成功，将管理员信息存入会话
        return "redirect:/admin/admin";
        // 重定向到管理首页
    }

    /**
     * 处理管理员退出登录请求
     * @param session HTTP会话
     * @return 重定向到登录页面
     */
    @RequestMapping("/logout")
    public String logout(HttpSession session){
        session.invalidate(); // 使会话失效
        return "redirect:/admin/login";
        // 重定向到登录页面
    }

    /**
     * 跳转到"开发中"页面
     * @return 视图名称
     */
    @RequestMapping("/developing")
    public String developing(){
        return "admin/developing";
    }

}